DSFX.ease =
{
	backBoth: function (t, b, c, d, s) 
	{ 
		if (typeof s == "undefined") 
		{ 
			s = 1.70158; 
		} 
		if ((t /= d / 2) < 1) 
		{ 
			return c / 2 * (t * t * (((s *= 1.525) + 1) * t - s)) + b; 
		} 
		return c / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b; 
	},
	
	backIn: function (t, b, c, d, s) 
	{ 
		if (typeof s == "undefined") 
		{ 
			s = 1.70158; 
		} 
		return c * (t /= d) * t * ((s + 1) * t - s) + b; 
	},
	
	backOut: function (t, b, c, d, s) 
	{ 
		if (typeof s == "undefined") 
		{ 
			s = 1.70158; 
		} 
		return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; 
	},
	
	bounceBoth: function (t, b, c, d) 
	{ 
		if (t < d / 2) 
		{ 
			return DSFX.ease.bounceIn(t * 2, 0, c, d) * 0.5 + b; 
		} 
		return DSFX.ease.bounceOut(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b; 
	},
	
	bounceIn: function (t, b, c, d) 
	{ 
		return c - DSFX.ease.bounceOut(d - t, 0, c, d) + b; 
	},
	
	bounceOut: function (t, b, c, d) 
	{ 
		if ((t /= d) < 0.36363636363636365) 
		{ 
			return c * (7.5625 * t * t) + b; 
		} 
		else if (t < 0.7272727272727273) 
		{ 
			return c * (7.5625 * (t -= 0.5454545454545454) * t + 0.75) + b; 
		} 
		else if (t < 0.9090909090909091) 
		{ 
			return c * (7.5625 * (t -= 0.8181818181818182) * t + 0.9375) + b; 
		} 
		else 
		{ 
			return c * (7.5625 * (t -= 0.9545454545454546) * t + 0.984375) + b; 
		} 
	},
	
	easeBoth: function (t, b, c, d) 
	{ 
		if ((t /= d / 2) < 1) 
		{ 
			return c / 2 * t * t + b; 
		} 
		return - c / 2 * (--t * (t - 2) - 1) + b; 
	},
	
	easeBothStrong: function (t, b, c, d) 
	{ 
		if ((t /= d / 2) < 1) 
		{ 
			return c / 2 * t * t * t * t + b; 
		} 
		return - c / 2 * ((t -= 2) * t * t * t - 2) + b; 
	},
	
	easeIn: function (t, b, c, d) 
	{ 
		return c * (t /= d) * t + b; 
	},
	
	easeInStrong: function (t, b, c, d) 
	{ 
		return c * (t /= d) * t * t * t + b; 
	},
	
	easeOut: function (t, b, c, d) 
	{ 
		return - c * (t /= d) * (t - 2) + b; 
	},
	
	easeOutStrong: function (t, b, c, d) 
	{ 
		return - c * ((t = t / d - 1) * t * t * t - 1) + b; 
	},
	
	elasticBoth: function (t, b, c, d, a, p) 
	{ 
		if (t == 0) 
		{ 
			return b; 
		} 
		if ((t /= d / 2) == 2) 
		{ 
			return b + c; 
		} 
		if (!p) 
		{ 
			p = d * 0.44999999999999996; 
		} 
		if (!a || a < Math.abs(c)) 
		{ 
			a = c; 
			var s = p / 4; 
		} 
		else 
		{ 
			var s = p / (2 * Math.PI) * Math.asin(c / a); 
		} 
		if (t < 1) 
		{ 
			return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; 
		} 
		return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b; 
	},
	
	elasticIn: function (t, b, c, d, a, p) 
	{ 
		if (t == 0) 
		{ 
			return b; 
		} 
		if ((t /= d) == 1) 
		{ 
			return b + c; 
		} 
		if (!p) 
		{
			p = d * 0.3; 
		} 
		if (!a || a < Math.abs(c)) 
		{ 
			a = c; var s = p / 4; 
		} 
		else 
		{ 
			var s = p / (2 * Math.PI) * Math.asin(c / a); 
		} 
		return - (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; 
	},
	
	elasticOut: function (t, b, c, d, a, p) 
	{ 
		if (t == 0) { return b; 
		} 
		if ((t /= d) == 1) 
		{ 
			return b + c; 
		} 
		if (!p) 
		{ 
			p = d * 0.3; 
		} 
		if (!a || a < Math.abs(c)) 
		{ 
			a = c; var s = p / 4; 
		} 
		else 
		{ 
			var s = p / (2 * Math.PI) * Math.asin(c / a); 
		} 
		return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b; 
	} 
}